import random
import pickle
import tkSimpleDialog as tks
import tkFileDialog as tkf
import tkMessageBox as tkm
import random
from batiment2 import *
from Etoile import *
from Planete import *
from unite import *
from univers import *
import threading

class Modele(object):
    def __init__(self,parent):
        self.parent=parent
        self.univers=Univers([])
        self.nbEtoilesDefaut=80
        self.tailleDefautX=600
        self.tailleDefautY=400
        self.timerBougerUnites=threading.Timer(0.1, self.bougerUnites)
        self.timerActive=0
        self.timerBougerUnites.start()
        #self.unitesEnMouvement=[]
    
    ##cree un univers selon parametres entres
    ##puis renvoie l'univers au controleur    
    def creerCustom(self, nbEtoiles,hauteur,largeur,profondeur):
        listeEtoiles=[]
        numero = 0
        for i in range(nbEtoiles):
            check=1
            x=random.randint(-largeur/2,largeur/2)
            y=random.randint(-hauteur/2,hauteur/2)
            z=random.randint(1,profondeur/2)
            ##verifier si une etoile y existe deja
            for j in listeEtoiles:
                if j.x==x and j.y==y and j.z==z:
                    check=0
            if check == 0:
                check=1
            else:
                listeEtoiles.append(Etoile(x,y,z,numero,""))
                numero+=1
                
        univers=Univers(listeEtoiles)
        
        return univers
    
    ##cree un univers avec les parametres par defaut
    ##puis renvoie l'univers au controleur
    def creerDefaut(self):
        listeEtoiles=[]
        numero = 0
        for i in range(self.nbEtoilesDefaut):
            check=1
            x=random.randint(-self.tailleDefautX,self.tailleDefautX)
            y=random.randint(-self.tailleDefautY,self.tailleDefautY)
            z=random.randint(1,(2*self.tailleDefautX))
            for j in listeEtoiles:
                if j.x==x and j.y==y and j.z==z:
                    check=0
            if check == 0:
                check=1
            else:
                listeEtoiles.append(Etoile(x,y,z,numero,""))
                numero+=1
 
        univers = Univers(listeEtoiles)
        
        return univers
    
    ##ajoute l'univers et l'entite Joueur() du joueur au modele
    def joindrePartie(self, univers, joueur):
        self.univers=univers
        self.joueur=joueur
    
    ##Demander a l'unite d'initialiser le deplacement puis
    ##l'ajouter l'unite au tableau des unites en mouvement    
    def initMouvement(self, indexUnite,x,y,z):
        self.univers.tabUnites[indexUnite].initMouvement(x,y,z)
        self.univers.unitesEnMouvement.append(indexUnite)
        if len(self.univers.unitesEnMouvement)==1:
            self.bougerUnites()
    
    ##Passer a travers de la liste des unites en mouvement
    ##et leur demander de se deplacer
    def bougerUnites(self):
        self.parent.effacer()
        print "modele bougerUnites"
        for i in self.univers.unitesEnMouvement:
            reponse = self.univers.tabUnites[i].bouger()
            if reponse == "fini":
                self.univers.unitesEnMouvement.remove(i)
        if len(self.univers.unitesEnMouvement)>0:
            self.timerBougerUnites.run()
        self.parent.afficher()
        
    def checkProprietaire(self, indexUnite):
        if self.univers.tabUnites[indexUnite].proprietaire == self.joueur.nom:
            return 1
        else:
            return 0
    
    ##Ajoute un joueur a la partie
    def nouveauJoueur(self, newJoueur, newEtoile, newUnite):
        self.univers.listeJoueurs.append(newJoueur)
        self.univers.tabEtoiles[newEtoile.numero]=newEtoile
        self.univers.tabUnites.append(newUnite)
        
#    def deplacerUnite(self, x, y, unite):
#        #if self.joueur == unite.proprietaire:
#        self.parent.initMouvement(0, x, y, 1)